package com.base.logistics.sf.bean.order;

import com.base.logistics.utils.SfGsonBuilder;

import java.io.Serializable;
import java.util.List;

/**
 * <pre>
 * 订单确认/取消请求对象
 * </pre>
 * @since 2021-02-15
 */
public class UpdateOrderRequest implements Serializable {

    /**
     * 接口服务代码
     */
    private static final String SERVICE_CODE = "EXP_RECE_UPDATE_ORDER";

    /**
     * 客户订单号
     * <pre>
     * 是否必填： 是
     * </pre>
     */
    private String orderId;


    /**
     * 客户订单操作标识: 1:确认;2:取消
     * <pre>
     * 是否必填： 否
     * 默认值： 1
     * </pre>
     */
    private Integer dealType;

    /**
     * 报关批次
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String customsBatchs;

    /**
     * 揽收员工号
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String collectEmpCode;

    /**
     * 头程运单号
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String inProcessWaybillNo;

    /**
     * 原寄地网点代码
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String sourceZoneCode;

    /**
     * 目的地网点代码
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private String destZoneCode;

    /**
     * 订单货物总重量，包含子母件，单位千克，精确到小数点后3位，如果提供此值，必须>0
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Double totalWeight;

    /**
     * 订单货物总体积，单位立方厘米，精确到小数点后3位，会用于计抛（是否计抛具体商务沟通中双方约定）
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Double totalVolume;

    /**
     * 快件产品类别，支持附录《快件产品类别表》的产品编码值，仅可使用与顺丰销售约定的快件产品
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Integer expressTypeId;

    /**
     * 客户订单货物总长，单位厘米，精确到小数点后3位，包含子母件
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Double totalLength;

    /**
     * 客户订单货物总宽，单位厘米，精确到小数点后3位，包含子母件
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Double totalWidth;

    /**
     * 客户订单货物总高，单位厘米，精确到小数点后3位，包含子母件
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private Double totalHeight;

    /**
     * 增值服务信息
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private List<Service> serviceList;

    /**
     * 扩展属性
     * <pre>
     * 是否必填： 否
     * </pre>
     */
    private List<ExtraInfo> extraInfoList;

    /**
     * 顺丰运单号
     * <pre>
     * 是否必填： dealtype=1，必填
     * </pre>
     */
    private List<WaybillNoInfo> waybillNoInfoList;

    /**
     * 获取接口服务代码
     * @return 接口服务代码
     */
    public String getServiceCode(){
        return SERVICE_CODE;
    }

    /**
     * 转json
     * @return json数据
     */
    public String toJson() {
        return SfGsonBuilder.create().toJson(this);
    }

    public String getOrderId() {
        return this.orderId;
    }

    public Integer getDealType() {
        return this.dealType;
    }

    public String getCustomsBatchs() {
        return this.customsBatchs;
    }

    public String getCollectEmpCode() {
        return this.collectEmpCode;
    }

    public String getInProcessWaybillNo() {
        return this.inProcessWaybillNo;
    }

    public String getSourceZoneCode() {
        return this.sourceZoneCode;
    }

    public String getDestZoneCode() {
        return this.destZoneCode;
    }

    public Double getTotalWeight() {
        return this.totalWeight;
    }

    public Double getTotalVolume() {
        return this.totalVolume;
    }

    public Integer getExpressTypeId() {
        return this.expressTypeId;
    }

    public Double getTotalLength() {
        return this.totalLength;
    }

    public Double getTotalWidth() {
        return this.totalWidth;
    }

    public Double getTotalHeight() {
        return this.totalHeight;
    }

    public List<Service> getServiceList() {
        return this.serviceList;
    }

    public List<ExtraInfo> getExtraInfoList() {
        return this.extraInfoList;
    }

    public List<WaybillNoInfo> getWaybillNoInfoList() {
        return this.waybillNoInfoList;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public void setDealType(Integer dealType) {
        this.dealType = dealType;
    }

    public void setCustomsBatchs(String customsBatchs) {
        this.customsBatchs = customsBatchs;
    }

    public void setCollectEmpCode(String collectEmpCode) {
        this.collectEmpCode = collectEmpCode;
    }

    public void setInProcessWaybillNo(String inProcessWaybillNo) {
        this.inProcessWaybillNo = inProcessWaybillNo;
    }

    public void setSourceZoneCode(String sourceZoneCode) {
        this.sourceZoneCode = sourceZoneCode;
    }

    public void setDestZoneCode(String destZoneCode) {
        this.destZoneCode = destZoneCode;
    }

    public void setTotalWeight(Double totalWeight) {
        this.totalWeight = totalWeight;
    }

    public void setTotalVolume(Double totalVolume) {
        this.totalVolume = totalVolume;
    }

    public void setExpressTypeId(Integer expressTypeId) {
        this.expressTypeId = expressTypeId;
    }

    public void setTotalLength(Double totalLength) {
        this.totalLength = totalLength;
    }

    public void setTotalWidth(Double totalWidth) {
        this.totalWidth = totalWidth;
    }

    public void setTotalHeight(Double totalHeight) {
        this.totalHeight = totalHeight;
    }

    public void setServiceList(List<Service> serviceList) {
        this.serviceList = serviceList;
    }

    public void setExtraInfoList(List<ExtraInfo> extraInfoList) {
        this.extraInfoList = extraInfoList;
    }

    public void setWaybillNoInfoList(List<WaybillNoInfo> waybillNoInfoList) {
        this.waybillNoInfoList = waybillNoInfoList;
    }

    public String toString() {
        return "UpdateOrderRequest(orderId=" + this.getOrderId() + ", dealType=" + this.getDealType() + ", customsBatchs=" + this.getCustomsBatchs() + ", collectEmpCode=" + this.getCollectEmpCode() + ", inProcessWaybillNo=" + this.getInProcessWaybillNo() + ", sourceZoneCode=" + this.getSourceZoneCode() + ", destZoneCode=" + this.getDestZoneCode() + ", totalWeight=" + this.getTotalWeight() + ", totalVolume=" + this.getTotalVolume() + ", expressTypeId=" + this.getExpressTypeId() + ", totalLength=" + this.getTotalLength() + ", totalWidth=" + this.getTotalWidth() + ", totalHeight=" + this.getTotalHeight() + ", serviceList=" + this.getServiceList() + ", extraInfoList=" + this.getExtraInfoList() + ", waybillNoInfoList=" + this.getWaybillNoInfoList() + ")";
    }

}
